package br.com.freelancer.modelo;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.stereotype.Component;

import br.com.freelancer.enums.TipoPerfilEnum;

/**
 * Modelo de Dados de Usuario.
 * @author Luis Garcia
 */
@Entity
@Table(name = "tbUsuario", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
@Component("usuario")
public class Usuario extends ModeloBase {

	/** Serial Version. */
	@Transient
	private static final long serialVersionUID = 1L;

	public Usuario(){}
	
    public Usuario(String login, String senha, String apelido, String email,
			String celular, Integer contadorLogin, Date dataUltimoLogin, TipoPerfilEnum tipoPerfil) {
		super();
		this.login = login;
		this.senha = senha;
		this.apelido = apelido;
		this.email = email;
		this.contadorLogin = contadorLogin;
		this.dataUltimoLogin = dataUltimoLogin;
		this.tipoPerfil = tipoPerfil;
	}

    @NotNull
    @NotEmpty
	@Column(name="login")
	private String login;

	@NotNull
    @NotEmpty
    @Column(name="senha")
	private String senha;

    @NotNull
    @Size(min = 1, max = 60)
    @Pattern(regexp = "[A-Za-z ]*", message = "")
    @Column(name="apelido")
	private String apelido;

    @NotNull
    @NotEmpty
    @Email
    @Column(name="email")
	private String email;

    @Column(name="contadorLogin")
	private Integer contadorLogin;

    @Column(name="dtUltimoLogin")
	private Date dataUltimoLogin;

    @Column(name="flTipoPerfil")
    private TipoPerfilEnum tipoPerfil;
    
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getApelido() {
		return apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Integer getContadorLogin() {
		return contadorLogin;
	}

	public void setContadorLogin(Integer contadorLogin) {
		this.contadorLogin = contadorLogin;
	}

	public Date getDataUltimoLogin() {
		return dataUltimoLogin;
	}

	public void setDataUltimoLogin(Date dataUltimoLogin) {
		this.dataUltimoLogin = dataUltimoLogin;
	}

	public TipoPerfilEnum getTipoPerfil() {
		return tipoPerfil;
	}

	public void setTipoPerfil(TipoPerfilEnum tipoPerfil) {
		this.tipoPerfil = tipoPerfil;
	}

	@Override
	public String toString() {
		return "Usuario [login=" + login + ", senha=" + senha + ", apelido="
				+ apelido + ", email=" + email + ", contadorLogin=" + contadorLogin + ", dataUltimoLogin="
				+ dataUltimoLogin +", tipoPerfil="+tipoPerfil+ "]";
	}

}